package com.hbzjt2012.base;

public class Demo02 {
    public static void main(String[] args) {
        //类型转换
        //低 --------------------------------------------------> 高
        // byte,short,char -> int -> long -> float -> double

        int i = 128;
        byte b = (byte) i;  //内存溢出
        double num = i;

        //强制转换  （类型）变量名     高--->低
        //自动转换                  低--->高

        System.out.println(i);  //128
        System.out.println(b);  //-128
        System.out.println(num);    //128.0
        System.out.println("=============================");

        /*
        注意点：
        1、不能对布尔值进行转换
        2、不能把对象类型转换为不相干的类型
        3、在把高容量转换到低容量的时候，强制转换
        4、转换的时候可能存在内存溢出，或者精度问题！
         */

        System.out.println((int)23.7);  //23
        System.out.println((int)-45.89f);   //-45
        System.out.println("=============================");

        char c = 'a';
        int d = c + 1;
        System.out.println(d);      //98
        System.out.println((char)d);    //b
        System.out.println("=============================");

        //操作比较大的数的时候，注意溢出问题
        //JDK7新特性，数字之间可以用下划线分割
        int money = 1000000000;
        int money1 = 10_0000_0000;
        System.out.println(money);  //100000000
        System.out.println(money1); //100000000

        int years = 20;
        int total = money * years;  //-1474836480，计算的时候溢出了
        long total2 = money * years;    //默认是int，转换之前已经存在问题了

        System.out.println(total);  //-1474836480
        System.out.println(total2); //-1474836480

        long total3 = money * ((long)years);    //先把一个数转换为long
        System.out.println(total3); //20000000000
    }
}
